﻿#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <assert.h>
#include <stdlib.h>
// 原题连接：https://leetcode.cn/problems/sorted-merge-lcci/
/*
题目描述：
给定两个排序后的数组 A 和 B，其中 A 的末端有足够的缓冲空间容纳 B。 编写一个方法，将 B 合并入 A 并排序。
初始化 A 和 B 的元素数量分别为 m 和 n。

示例:
输入:
A = [1,2,3,0,0,0], m = 3
B = [2,5,6],       n = 3
输出: [1,2,2,3,5,6]

说明:
A.length == n + m
*/

// 开始解题：
// 方法1——双指针
void merge(int* A, int ASize, int m, int* B, int BSize, int n) {
    assert(A && B);
    int* temp = (int*)malloc((m + n) * sizeof(int));
    if (NULL == temp) {
        perror("malloc fail!\n");
        exit(-1);
    }
    int pa = 0;
    int pb = 0;
    int i = 0;
    while (pa < m && pb < n) {
        if (A[pa] < B[pb]) {
            temp[i] = A[pa];
            pa++;
        }
        else {
            temp[i] = B[pb];
            pb++;
        }
        i++;
    }
    while (pa < m) {
        temp[i] = A[pa];
        pa++;
        i++;
    }
    while (pb < n) {
        temp[i] = B[pb];
        pb++;
        i++;
    }
    for (i = 0; i < m + n; i++) {
        A[i] = temp[i];
    }
    free(temp);
}